package cn.han.serializable;

import java.io.Serializable;

//本类用于序列化测试的物料类
/*如果本类想要被序列化，那么必须实现一个可序列化的接口，
* java.io.NotSerializableException: cn.han.serializable.Student
* Serializable接口是一个空接口，里面什么方法都没有
* 实现这个接口相当于给Student类做一个标记，标记这个类的对象可以被序列化，与法规定
* 序列化与反序列化时的UID必须保持一致，如果不一样，反序列化会失败
* 所以我们通常的操作是：一次序列化对应一次反序列化
* 注意：如果一次序列化之后，Student类并没有做更改，那么多次反序列化也没有问题
* 只要Student发生改动，UID的值就会改变*/
public class Student implements Serializable {
    //如果不想让UID随着类的改变而改变，那么我们可以把它设置成一个固定值
    private static final long serialVersionUID = 2L;
    //1.1 定义学生相关的属性，并进行封装
    private String name;//姓名
    private int age;//年龄
    private String addr;//住址
    private char gender;//性别

    //2.1创建本类的无参构造--注意必须手动提供无参构造，否则会被覆盖
    public Student(){
        System.out.println("我是Student类的无参构造");
    }
//2.2创建本类的全参构造--功能：创建对象+给对象的所有属性赋值
    public Student(String name, int age, String addr, char gender) {
        this.name = name;
        this.age = age;
        this.addr = addr;
        this.gender = gender;
        System.out.println("我是Student类的全参构造");
    }

    //1.2给被封装的属性提供对应的set与get方法
    public String getName() {

        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getAddr() {
        return addr;
    }

    public void setAddr(String addr) {
        this.addr = addr;
    }

    public char getGender() {
        return gender;
    }

    public void setGender(char gender) {
        this.gender = gender;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", addr='" + addr + '\'' +
                ", gender=" + gender +
                '}';
    }
}
